热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

篇幅|也就是_[PublishAARToMaven]使用Gradle发布AAR到Maven仓库

篇首语:本文由编程笔记#小编为大家整理,主要介绍了[PublishAARToMaven]使用Gradle发布AAR到Maven仓库相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了[Publish AAR To Maven] 使用 Gradle 发布 AAR 到 Maven 仓库相关的知识,希望对你有一定的参考价值。


========================================================
作者:qiujuer
博客:blog.csdn.net/qiujuer
网站:www.qiujuer.net
开源库:github.com/qiujuer/Genius-Android
转载请注明出处:http://blog.csdn.net/qiujuer/article/details/44195131
——学之开源,用于开源;初学者的心态,与君共勉!

========================================================

有一个好的库想与世界的伙伴分享,于是共享到GitHub上,于是有人看到了,但是要使用却发现配置非常难。但是发现别人的库只需要一行代码却能使用;于是我想知道为什么能这么简单。
在这篇文章中将带你了解如何发布你的库到远程仓库Maven中,又如何使用。


准备

开始之前我们有一定的准备工作,如果准备好了那么后面将会非常顺畅。


  • 注册 https://issues.sonatype.org 账户,并创建你的 Group Id
  • 学会GPGTools的使用,并生成你的密钥对;见:使用GPG对文件进行签名加密
  • 编写你的库,并准备好发布,工具:Android-Studio
  • 添加发布Maven的Gradle文件
  • 添加你的个人信息,如你的发布地址、库版本信息等
  • 开发发布快照、以及正式版本,审核

开始

前面的两项工作由于篇幅较大,单独开篇了,欢迎大家去看~~,我们从第三的地方开始。


编写Lib

编写库,这里我采用的是android-Studio;至于其使用建立过程以及简单使用大家可见:环境配置之正式版Android Studio 1.0

在这里我使用 Genius-Android 开源库进行演示。

在本次项目中我们尝试发布 UI 部分,图中圈起来部分为我们需要的文件。


编写发布文件

发布文件就是其中的 maven_push.gradle 。由于代码较长就不贴代码了,大家可以去GitHub上查看。

代码已经发布到 BeFoot 开源项目中.
该代码运行在 Gradle 中,作用是按照配置进行打包代码文件,然后签名文件,最后发布你的文件到仓库。

在该代码中可以看见许多的方法与参数,如:

def isReleaseBuild()
return VERSION_NAME.contains("SNAPSHOT") == false

这个方法的作用是判断版本名称是否含有 “SNAPSHOT”字段,也就是判断当前是否发布的是快照版本,以便传输到不同的服务器地址。
但是其中的 “VERSION_NAME” 哪里来的呢?往下看~~


gradle.properties

“maven_push” 文件中所有的字段都是访问的你的 “gradle.properties” 文件。

可以看见我们的项目中有两个这样的文件,两个文件中的内容都可以全部写到一个文件中。之所以写出两个,下面那个代表的是本项目中的全局变量,至于 UILib 中的那个则只局限于 UILib 中使用。

现在我们分别打开看看,首先打开下面那个全局的文件。

在这里我们需要更改的地方有如下几个地方:

再来看看库中的文件:



这里相对简单的多了,无非就是名称,ID,类型,版本等信息。
有必要说明的是,上面的POM_GROUP_ID+POM_ARTIFACT_ID+VERSION_NAME 将会得到如下的使用方式:


dependencies
compile 'com.github.qiujuer:genius-ui:3.0.0-SNAPSHOT'

完了?没~还有一个至关重要的地方,在”Maven_Push”的代码中我们会找到:

以及其中的 signing 部分,但是你会发现你找遍了上面的所有的文件都没有发现这些字段,那么这些字段在哪里呢?

很简单,在Android-Studio 缓存文件夹配置 中有讲解“.gradle”目录对吧?那么现在我们去看看 这个目录中有什么。

可以看见其中也有一个 “gradle.properties”文件,这个文件不在项目中,但是在项目中却可以访问,这是一个全局的文件,任何项目都可以访问该文件,如果你没有,那么可以自己创建一个就OK。



为什么要存储到这里?我们都知道项目中的 “gradle.properties” 文件一般来说都是会提交到 Git 上面去的,所以项目中的文件不应该包含私密的东西,比如密钥对,密钥密码,以及你的 Maven 的账户信息。


打开该文件我们能看见:


  • 密钥的相关东西请见:使用GPG对文件进行签名加密
  • Sonatype 用户名密码详见:注册 Maven 仓库 sonatype.org 账户

build.gradle

现在还需要修改你的项目中的 build 文件,需要更改的地方如下:

android
sourceSets
main
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java']
res.srcDirs = ['src/main/res']


lintOptions
abortOnError false

apply from: 'https://raw.github.com/qiujuer/BeFoot/master/blog/gradle-mvn-push/gradle-mvn-push.gradle'

发布

如果你上面的都做到了,那么现在进入发布的地段了~~


执行发布命令

Android-Studio进入项目中,打开“Terminal”窗口,进入你的项目中,执行命令:

$ gradle clean build uploadArchives


第一次操作的时候将会下载一大堆的依赖。

最后出现成功提示则OK。


检查快照版本

在这里我们进入:https://oss.sonatype.org/content/groups/public/
找到你的项目地址,我本次的是:
https://oss.sonatype.org/content/groups/public/com/github/qiujuer/genius-ui/3.0.0-SNAPSHOT/

可以看出其中有着原始文件以及签名等验证文件。
如果你的没有“asc”文件,那么发布“Release”版本时将无法通过审核。

也不是说快照版本就无法使用,同样可以,其使用方式为:

dependencies
repositories
maven url "https://oss.sonatype.org/content/repositories/snapshots/"

compile 'com.github.qiujuer:genius-ui:3.0.0-SNAPSHOT'

如果发布了过个快照版本,那么就为:

compile 'com.github.qiujuer:genius-ui:3.0.0-SNAPSHOT-2'

发布“Release”

该发布方法操作命令行的方式与快照版本一样,完全一样;只需要更改你的库中的:gradle.properties 文件中的 VERSION_NAME ,删除掉后面的 “”-SNAPSHOT”“ 就OK。

之后执行命令行命令;然后你会发现你在:
https://oss.sonatype.org/content/groups/public/
中无法找到你发布的 “Release”版本;这是正常的;如果现在找到了反而不正常。


操作仓库发布

要完成“Release”版本的发布还需要登陆到后台中进行一些简单的操作。
网站:https://oss.sonatype.org/
登陆:用户名与密码与https://issues.sonatype.org/中的完全一样。
登陆成功后点击左边导航中的:“Staging Repositories”

在其中根据你的GroupId去找你对应的一行。比如我的Id:“com.github.qiujuer”那么就是:

找到后点击他,如果不是你的或者你没有找到那么看看是不是你上面根本就没有上传成功。

选中后点击上面的“Close”按钮,填写描述信息;然后等待一段时间;在这个过程中你可以点击刷新按钮。

在下面可以看见发送了邮件提醒,然后上面的 “Release” 按钮可以点击了,此时点击该按钮,填写描述信息,不必太多。然后等待;当下面同样出现发送了邮件提醒的时候那么恭喜你发布成功了。



如果在上面你上传的文件中没有签名文件那么将无法操作成功;此时你应该重新上传有签名的版本。


发布成功后你的使用方式为(你并不能立即就能使用,一般需要10分钟及其以上的时间):

dependencies
compile 'com.github.qiujuer:genius-ui:3.0.0'

附件

本次操作中需要的文件我都上传到 GitHub 上了。
地址:https://github.com/qiujuer/BeFoot/tree/master/blog/gradle-mvn-push


一些问题

该地方,暂时就不写了,太长了~~
说一个简单的吧:如果执行发布命令时出现:401 错误,代表你的账户登录失败,也就是你的账户名或者密码错误。

其他问题,大家如果遇到了可以提出来我会一一回答的。

==============追加===============


仓库唯一

发布项目到Maven 仓库 ,必须要使用sonatype.org么?sonatype.org是一个载体?还有其他选择?
答案是:有其他的选择~
如果 Gradle 没有内置你的仓库地址你也可以指定,甚至可以使用自己部署的服务器来发布。比如:

这个就是发布到 快照 仓库,但是快照仓库地址 Gradle 并不知道,所以需要指定。


一些题外话

说实话这篇文章,很早以前就想写了;但是大概想了一下感觉篇幅会比较大,所以一直没有写。

这次也是有朋友在问这方面的情况,所以就花了几天时间写了,真的是花了几天时间,不是空闲时间。也许你们看只需要10分钟,或许10分钟都要不到,可我却花了你的100倍甚至更多的时候来写的。

由于是使用的 MarkDown 编辑器(出现BUG意外死掉的情况少)写的,所以没有像以前一样加上高亮等操作,不是不加,而是编辑器还不支持。

========================================================
作者:qiujuer
博客:blog.csdn.net/qiujuer
网站:www.qiujuer.net
开源库:github.com/qiujuer/Genius-Android
转载请注明出处:http://blog.csdn.net/qiujuer/article/details/44195131
——学之开源,用于开源;初学者的心态,与君共勉!

========================================================


推荐阅读
  • 在使用 Nginx 作为服务器时,发现 Chrome 能正确从缓存中读取 CSS 和 JS 文件,而 Firefox 却无法有效利用缓存,导致加载速度显著变慢。 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • Uniswap 与 MoonPay 合作,引入法币交易功能。本文探讨这一合作对用户进入加密货币领域的安全性及便利性的影响。 ... [详细]
  • 本文详细介绍了在 CentOS 系统中如何创建和管理 SWAP 分区,包括临时创建交换文件、永久性增加交换空间的方法,以及如何手动释放内存缓存。 ... [详细]
  • 本文介绍了.hbs文件作为Ember.js项目中的视图层,类似于HTML文件的功能,并详细讲解了如何在Ember.js应用中集成Bootstrap框架及其相关组件的方法。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 使用TabActivity实现Android顶部选项卡功能
    本文介绍如何通过继承TabActivity来创建Android应用中的顶部选项卡。通过简单的步骤,您可以轻松地添加多个选项卡,并实现基本的界面切换功能。 ... [详细]
  • 本文详细介绍了在Windows系统中如何配置Nginx以实现高效的缓存加速功能,包括关键的配置文件设置和示例代码。 ... [详细]
  • 本文介绍了如何通过命令行有效地终止所有 Node.js 进程实例,以解决因端口冲突或其他服务冲突导致的问题。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
  • 本文探讨了在使用JavaMail发送电子邮件时,抄送功能未能正常工作的问题,并提供了详细的代码示例和解决方法。 ... [详细]
  • 探讨密码安全的重要性
    近期,多家知名网站如CSDN、人人网、多玩、开心网等的数据库相继被泄露,其中大量用户的账户密码因明文存储而暴露无遗。本文将探讨黑客获取密码的常见手段,网站如何安全存储用户信息,以及用户应如何保护自己的密码。 ... [详细]
author-avatar
帕格迪奥
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有